<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 数据对象:
        // 方式1：字面对象定义 => 不能复用结构 -> 一个字面量对象只能表示一个数据组合
        let user1 = {
            // key:value 格式定义属性  => 键值对
            //     key 属性名
            //     value 属性值
            name:"tom",
            age:33,
            sex:"男"
        };
        let user2 = {
            name:"jack",
            age:23,
            sex:"男"
        }

        console.log(user1);
        console.log(user2);

        // 方式2：构造器方案
        //      function 方法声明关键字，对象构造器申明关键字  【语法二意性】
        //      function 方法名( 方法参数 ){ 方法体 }
        function User(name,age,sex){
            console.log("user构造器");
            // 构造函数中可以通过 this 关键字访问创建的实例对象
            // this.name = "张三";
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
        // 采用关键字 new 调用构造函数方法，实现对象构建
        let user3 = new User("张三",33,"男");
        console.log(user3);

        let user4 = new User("李四",22,"男");
        console.log(user4);

        // 方法3：class 类对象构建
        class Stu {
            // 声明了Stu的类
            // name;
            // age;
            // sex;

            // class 的构造函数
            constructor(name,sex,age){
                this.name = name;
                this.sex = sex;
                this.age = age;
            }
        }

        let stu1 = new Stu("王小二","男",32);
        console.log(stu1);
        
        // 对象属性的基本使用
        // 对象属性的取值操作，通过属性访问关键字 . 进行连接描述
        console.log( stu1.name );
        // 对象属性的赋值操作，先完成属性调用，通过 = 进行新值定义
        console.log(stu1.age);
        stu1.age = 24;
        console.log(stu1.age);


        // 对象属性的取值操作,通过动态属性访问关键字 ["属性名"] 或者 [字符串变量] 进行属性取值
        console.log( stu1["name"] );
        let key = "name";
        console.log( stu1[ key ] );
        key = "age";
        console.log( stu1[ key ] );
        
        // for……in…… 迭代器
        // for( let 声明的循环遍历 in 被循环变量 ){ 循环体 }
        for( let k in stu1 ){
            // stu1 是对象，k 循环的是对象的属性名(键)
            console.log( k , stu1[k] );
        }

        let arr = ["黎昕","明哲","锦程","浩"];
        for( let i in arr ){
            // arr 是数组，i 循环的是数组的下标
            console.log(i,arr[i]);
        }

    </script>
</head>
<body>
    
</body>
</html>